From c6eac27d66c2344d062d130f4808b23bb1340a19 Mon Sep 17 00:00:00 2001 From: D-a-n-i-l-o Date: Tue, 29 Jun 2021 16:29:53 +0200 Subject: [PATCH 1/2] Added multi-variable declaration Signed-off-by: D-a-n-i-l-o --- src/wake/parser.wx | 54 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/src/wake/parser.wx b/src/wake/parser.wx index e5914b49..61a1ba45 100644 --- a/src/wake/parser.wx +++ b/src/wake/parser.wx @@ -300,6 +300,7 @@ Class Parser Method ParseVars( decls:Stack,flags:Int ) Local kind:=Parse() + Local missingTypeAndInit := New Stack Try Repeat @@ -314,14 +315,50 @@ Class Parser decl.ident=ParseIdent() If flags & DECL_EXTERN - Parse( ":" ) - decl.type=ParseType() - If CParse( "=" ) decl.symbol=ParseString() + If CParse( ":" ) + decl.type=ParseType() + For Local missingDecl := Eachin missingTypeAndInit + missingDecl.type = decl.type + Next + missingTypeAndInit.Clear() + If CParse( "=" ) decl.symbol=ParseString() + Else + missingTypeAndInit.Add( decl ) + Endif Else If CParse( ":" ) decl.type=ParseType() - If CParse( "=" ) decl.init=ParseExpr() + For Local missingDecl := Eachin missingTypeAndInit + If Not missingDecl.type + missingDecl.type = decl.type + Else + Error("Type already initialized: '"+missingDecl.ident+"'") + Endif + Next + If CParse( "=" ) + decl.init=ParseExpr() + For Local missingDecl := Eachin missingTypeAndInit + If Not missingDecl.init + missingDecl.init = decl.init + Endif + Next + Endif + missingTypeAndInit.Clear() Else If CParse( ":=" ) decl.init=ParseExpr() + For Local missingDecl := Eachin missingTypeAndInit + If Not missingDecl.init + missingDecl.init = decl.init + Else + Error("Already initialized: '"+missingDecl.ident+"'") + Endif + Next + missingTypeAndInit.Clear() + Else If CParse( "=" ) + decl.init=ParseExpr() + Error("Missing Type information for: '"+decl.ident+"'.") + missingTypeAndInit.Add( decl ) + Else + missingTypeAndInit.Add( decl ) Endif decl.endpos=EndPos @@ -329,6 +366,15 @@ Class Parser Until Not CParse( "," ) + If Not missingTypeAndInit.Empty + Local vnames:String + For Local vname := Eachin missingTypeAndInit + If vnames Then vnames += ", " + vnames += vname.ident + Next + Error("Missing Type information for: '"+vnames+"'") + Endif + ParseEol() Catch ex:ParseEx From 2bf6e1d1a4a10f00c2754954deef19d32d3e09e8 Mon Sep 17 00:00:00 2001 From: D-a-n-i-l-o Date: Sat, 3 Jul 2021 08:34:53 +0200 Subject: [PATCH 2/2] Fixed Vec3.New( x:T,v:Vec2 ) Signed-off-by: D-a-n-i-l-o --- modules/std/geom/vec3.wx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/std/geom/vec3.wx b/modules/std/geom/vec3.wx index 310b201d..62300a3e 100644 --- a/modules/std/geom/vec3.wx +++ b/modules/std/geom/vec3.wx @@ -44,7 +44,7 @@ Struct Vec3 End Method New( x:T,v:Vec2 ) - Self.x=z;Self.y=v.x;Self.z=v.y + Self.x=x;Self.y=v.x;Self.z=v.y End #Rem wonkeydoc Converts the vec3 to a vec3 of a different type or a printable string.