@@ -45,6 +45,8 @@ class CompilerBackend {
4545 abstract void CompileUnion (UnionNode node);
4646 abstract void CompileAlias (AliasNode node);
4747 abstract void CompileExtern (ExternNode node);
48+ abstract void CompileCall (WordNode node);
49+ abstract void CompileFuncAddr (FuncAddrNode node);
4850
4951 final void Error (Char, A... )(ErrorInfo error, in Char[] fmt, A args) {
5052 ErrorBegin(error);
@@ -81,9 +83,10 @@ class Compiler {
8183 auto node = cast (WordNode) inode;
8284
8385 switch (node.name) {
84- case " return" : backend.CompileReturn(node); break ;
86+ case " return" : backend.CompileReturn(node); break ;
8587 case " continue" : backend.CompileContinue(node); break ;
86- case " break" : backend.CompileBreak(node); break ;
88+ case " break" : backend.CompileBreak(node); break ;
89+ case " call" : backend.CompileCall(node); break ;
8790 case " error" : backend.Error(node.error, " Error thrown by code" ); break ;
8891 default : backend.CompileWord(node);
8992 }
@@ -159,14 +162,15 @@ class Compiler {
159162 }
160163 break ;
161164 }
162- case NodeType.Array: backend.CompileArray(cast (ArrayNode) inode); break ;
163- case NodeType.String: backend.CompileString(cast (StringNode) inode); break ;
164- case NodeType.Struct: backend.CompileStruct(cast (StructNode) inode); break ;
165- case NodeType.Const: backend.CompileConst(cast (ConstNode) inode); break ;
166- case NodeType.Enum: backend.CompileEnum(cast (EnumNode) inode); break ;
167- case NodeType.Union: backend.CompileUnion(cast (UnionNode) inode); break ;
168- case NodeType.Alias: backend.CompileAlias(cast (AliasNode) inode); break ;
169- case NodeType.Extern: backend.CompileExtern(cast (ExternNode) inode); break ;
165+ case NodeType.Array: backend.CompileArray(cast (ArrayNode) inode); break ;
166+ case NodeType.String: backend.CompileString(cast (StringNode) inode); break ;
167+ case NodeType.Struct: backend.CompileStruct(cast (StructNode) inode); break ;
168+ case NodeType.Const: backend.CompileConst(cast (ConstNode) inode); break ;
169+ case NodeType.Enum: backend.CompileEnum(cast (EnumNode) inode); break ;
170+ case NodeType.Union: backend.CompileUnion(cast (UnionNode) inode); break ;
171+ case NodeType.Alias: backend.CompileAlias(cast (AliasNode) inode); break ;
172+ case NodeType.Extern: backend.CompileExtern(cast (ExternNode) inode); break ;
173+ case NodeType.FuncAddr: backend.CompileFuncAddr(cast (FuncAddrNode) inode); break ;
170174 default : {
171175 backend.Error(inode.error, " Unimplemented node '%s'" , inode.type);
172176 }
0 commit comments