X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Usermode%2FLibraries%2Flibspiderscript.so_src%2Fast_to_bytecode.c;h=3bad1588d7e03d07678e5793f792dd8f7abc0b75;hb=239f2374299c1471a40b1087725b32f3f163d9b3;hp=7afd0c03240841dc2bff821a552cad782639edba;hpb=2c8989ea0849b0e207e6c357626d41c991dc423f;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libspiderscript.so_src/ast_to_bytecode.c b/Usermode/Libraries/libspiderscript.so_src/ast_to_bytecode.c index 7afd0c03..3bad1588 100644 --- a/Usermode/Libraries/libspiderscript.so_src/ast_to_bytecode.c +++ b/Usermode/Libraries/libspiderscript.so_src/ast_to_bytecode.c @@ -7,6 +7,7 @@ #include #include #include +#include "common.h" #include "ast.h" #include "bytecode_gen.h" #include "bytecode_ops.h" @@ -46,33 +47,26 @@ void AST_RuntimeError(tAST_Node *Node, const char *Format, ...); /** * \brief Convert a function into bytecode */ -tBC_Function *Bytecode_ConvertFunction(tAST_Function *ASTFcn) +tBC_Function *Bytecode_ConvertFunction(tScript_Function *Fcn) { tBC_Function *ret; tAST_BlockInfo bi = {0}; - - { - tAST_Node *arg; - int i; - char *arg_names[ASTFcn->ArgumentCount]; - int arg_types[ASTFcn->ArgumentCount]; - - for(arg = ASTFcn->Arguments, i = 0; arg; arg = arg->NextSibling, i ++) - { - arg_names[i] = arg->DefVar.Name; - arg_types[i] = arg->DefVar.DataType; - } - ret = Bytecode_CreateFunction(ASTFcn->Name, ASTFcn->ArgumentCount, arg_names, arg_types); - if(!ret) return NULL; - } + // TODO: Return BCFcn instead? + if(Fcn->BCFcn) return NULL; + + ret = Bytecode_CreateFunction(Fcn); + if(!ret) return NULL; bi.Handle = ret; - if( AST_ConvertNode(&bi, ASTFcn->Code) ) + if( AST_ConvertNode(&bi, Fcn->ASTFcn) ) { Bytecode_DeleteFunction(ret); return NULL; } + + Fcn->BCFcn = ret; + return ret; }