]> Nishi Git Mirror - gwion.git/commitdiff
:art: update includes
authorJérémie Astor <fennecdjay@gmail.com>
Sun, 13 Jun 2021 10:20:32 +0000 (12:20 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sun, 13 Jun 2021 10:20:32 +0000 (12:20 +0200)
include/emit.h
include/vm.h

index c64154a7dcfd09a8d2af6c50006cb6eb591fab6b..cdfd55ef4daa37306bcd9c9cc8ce78d1a4804535 100644 (file)
@@ -44,7 +44,7 @@ ANEW ANN Emitter new_emitter(MemPool);
 ANN void free_emitter(MemPool, Emitter);
 ANN m_bool emit_ast(const Env env, Ast ast);
 ANN m_bool emit_func_def(const Emitter emit, const Func_Def fdef);
-ANN m_bool emit_exp_call1(const Emitter, const Func);
+ANN m_bool emit_exp_call1(const Emitter, const Func, const bool is_static);
 ANN2(1) Instr emit_add_instr(const Emitter, const f_instr) __attribute__((returns_nonnull));
 ANN Code* emit_class_code(const Emitter, const m_str);
 ANN m_bool emit_array_extend(const Emitter, const Type, const Exp);
@@ -66,4 +66,11 @@ ANN static inline Instr emit_compound_addref(const Emitter emit, const Type t, c
   return !tflag(t, tflag_struct) ? emit_object_addref(emit, size, emit_var) :
                                                 emit_struct_addref(emit, t, size, emit_var);
 }
+
+ANN static inline bool is_static_call(const Emitter emit, const Exp e) {
+  if(e->exp_type != ae_exp_dot)
+    return true;
+  const Exp_Dot *member = &e->d.exp_dot;
+  return GET_FLAG(member->base->type, final) || is_class(emit->gwion, member->base->type) || member->base->exp_type == ae_exp_cast;
+}
 #endif
index 8d90a8cb68a21c688d7ab7a16887f622ea672664..1150ae4115fca7304be0f8816c6575d51044d375 100644 (file)
@@ -31,10 +31,10 @@ struct VM_Code_ {
   bool is_memoize;
 };
 
-struct frame_t {
+typedef struct frame_t {
   uint32_t push, pc;
   VM_Code code;
-};
+} frame_t;
 
 typedef struct Shreduler_* Shreduler;
 typedef struct Emitter_   * Emitter;