@@ -2950,7 +2950,7 @@ ExprNode* Parser::ParsePrimaryExpr(Token* token, std::size_t length,
2950
2950
std::cout << " ARG ParsePrimaryExpr FUNC" << " \n "
2951
2951
<< token[index] << std::endl
2952
2952
<< std::endl;
2953
- args.push_back (ParseVarDecl (token, length, index));
2953
+ args.push_back (ParseExpr (token, length, index));
2954
2954
if (token[index].type == Token::Type::OPERATOR &&
2955
2955
token[index].value ._operator == Token::OperatorType::comma) {
2956
2956
index++;
@@ -3104,11 +3104,10 @@ ExprNode* Parser::ParsePrimaryExpr(Token* token, std::size_t length,
3104
3104
if (full_expr == nullptr || preoper_expr == nullptr ) {
3105
3105
full_expr = main_expr = number_node;
3106
3106
} else {
3107
- if (preoper_expr != nullptr )
3108
- dynamic_cast <UnaryNode*>(preoper_expr)
3109
- ->SetUnaryNode (
3110
- dynamic_cast <UnaryNode*>(preoper_expr)->GetOperator (),
3111
- number_node);
3107
+ dynamic_cast <UnaryNode*>(preoper_expr)
3108
+ ->SetUnaryNode (
3109
+ dynamic_cast <UnaryNode*>(preoper_expr)->GetOperator (),
3110
+ number_node);
3112
3111
main_expr = number_node;
3113
3112
}
3114
3113
index++;
@@ -3130,6 +3129,7 @@ ExprNode* Parser::ParseExpr(Token* token, std::size_t length,
3130
3129
<< token[index] << std::endl
3131
3130
<< std::endl;
3132
3131
if (index >= length) return nullptr ;
3132
+ if (IsDecl (token, length, index)) return ParseVarDecl (token, length, index);
3133
3133
ExprNode* expr = ParsePrimaryExpr (token, length, index);
3134
3134
expr = ParseBinaryExpr (token, length, index, expr, 0 );
3135
3135
std::cout << " END ParseExpr" << " \n "
@@ -3574,7 +3574,7 @@ class BytecodeGenerator {
3574
3574
if (memory_.size () % 2 != 0 ) {
3575
3575
memory_.push_back (0 );
3576
3576
// all_size_++;
3577
- type_[type_.size ()] = (type_[type_.size ()] << 4 ) | type;
3577
+ type_[type_.size ()- 1 ] = (type_[type_.size ()- 1 ] << 4 ) | type;
3578
3578
} else {
3579
3579
memory_.push_back (0 );
3580
3580
// all_size_ += 2;
@@ -3596,7 +3596,8 @@ class BytecodeGenerator {
3596
3596
3597
3597
void * memory_data = malloc (size);
3598
3598
3599
- std::size_t read_index = 0 ;
3599
+ std::memcpy (memory_data, data, size);
3600
+ /* std::size_t read_index = 0;
3600
3601
while (read_index < size) {
3601
3602
switch (type) {
3602
3603
case 0x01:
@@ -3643,14 +3644,14 @@ class BytecodeGenerator {
3643
3644
default:
3644
3645
return index;
3645
3646
}
3646
- }
3647
+ }*/
3647
3648
3648
3649
for (std::size_t i = 0 ; i < size; i++) {
3649
3650
if (memory_.size () % 2 != 0 ) {
3650
3651
memory_.push_back (*(uint64_t *)memory_data);
3651
3652
memory_data = (void *)((uintptr_t )memory_data + 1 );
3652
3653
// all_size_++;
3653
- type_[type_.size ()] = (type_[type_.size ()] << 4 ) | type;
3654
+ type_[type_.size ()- 1 ] = (type_[type_.size ()- 1 ] << 4 ) | type;
3654
3655
} else {
3655
3656
memory_.push_back (*(uint64_t *)memory_data);
3656
3657
memory_data = (void *)((uintptr_t )memory_data + 1 );
@@ -3845,6 +3846,12 @@ void BytecodeGenerator::GenerateBytecode(CompoundNode* stmt) {
3845
3846
code_.push_back (0x42 );
3846
3847
code_.push_back (0x43 );
3847
3848
3849
+ // Version
3850
+ code_.push_back (0x00 );
3851
+ code_.push_back (0x00 );
3852
+ code_.push_back (0x00 );
3853
+ code_.push_back (0x00 );
3854
+
3848
3855
size_t memory_size = global_memory_.GetSize ();
3849
3856
std::cout << " Memory Size: " << memory_size << std::endl;
3850
3857
// if (global_memory_.GetSize() % 2 != 0) memory_size++;
@@ -4864,8 +4871,15 @@ std::size_t BytecodeGenerator::HandleFuncInvoke(FuncNode* func,
4864
4871
std::cout << " vm_type OK" << std::endl;
4865
4872
4866
4873
std::vector<std::size_t > vm_args;
4874
+
4875
+ std::string func_name = std::string (*func->GetName ());
4876
+ std::size_t func_name_index =
4877
+ global_memory_.Add (0x01 , func_name.size () + 1 , func_name.c_str ());
4878
+ std::size_t func_name_ptr_index = global_memory_.Add (0x06 , 8 );
4879
+ code.push_back (Bytecode (_AQVM_OPERATOR_PTR, func_name_index,
4880
+ func_name_ptr_index));
4881
+ vm_args.push_back (func_name_ptr_index);
4867
4882
vm_args.push_back (args.size () + 1 );
4868
- // TODO(ERROR)
4869
4883
std::cout << " vm_type: " << vm_type << " , Size: " << func_type->GetSize ()
4870
4884
<< std::endl;
4871
4885
std::size_t return_value_index =
@@ -4878,7 +4892,7 @@ std::size_t BytecodeGenerator::HandleFuncInvoke(FuncNode* func,
4878
4892
4879
4893
code.push_back (Bytecode (_AQVM_OPERATOR_INVOKE, vm_args));
4880
4894
4881
- return vm_args[1 ];
4895
+ return vm_args[2 ];
4882
4896
}
4883
4897
4884
4898
std::size_t BytecodeGenerator::GetIndex (ExprNode* expr,
0 commit comments