version 1.74, 2001/12/08 04:24:32
|
version 1.85, 2002/05/04 11:46:08
|
Line 20 class metal_class_class extends metal_ba
|
Line 20 class metal_class_class extends metal_ba
|
var $current_argument_number=0; |
var $current_argument_number=0; |
var $current_variable=""; |
var $current_variable=""; |
var $current_subclass=0; |
var $current_subclass=0; |
|
var $generate_function=array(); |
|
|
Function GetDocumentation(&$scope,&$compiler,&$code,&$attributes,$element_path) |
Function GetDocumentation(&$scope,&$compiler,&$code,&$attributes,$element_path) |
{ |
{ |
Line 81 class metal_class_class extends metal_ba
|
Line 82 class metal_class_class extends metal_ba
|
$this->classes[$index]["return_type"]=""; |
$this->classes[$index]["return_type"]=""; |
$this->classes[$index]["return_value_set"]=0; |
$this->classes[$index]["return_value_set"]=0; |
$this->classes[$index]["staticload"]=0; |
$this->classes[$index]["staticload"]=0; |
$this->classes[$index]["types"]=array(); |
|
$this->classes[$index]["functions"]=array(); |
$this->classes[$index]["functions"]=array(); |
$this->classes[$index]["variables"]=array(); |
$this->classes[$index]["variables"]=array(); |
$this->classes[$index]["declarationfile"]=$attributes->file; |
$this->classes[$index]["declarationfile"]=$attributes->file; |
Line 376 class metal_class_class extends metal_ba
|
Line 376 class metal_class_class extends metal_ba
|
$compiler->SetElementError($attributes->file,$function_element_path,"it was not defined the class function argument type"); |
$compiler->SetElementError($attributes->file,$function_element_path,"it was not defined the class function argument type"); |
return(0); |
return(0); |
} |
} |
|
if(GetType($colon=strpos($type=$argument["type"],":"))=="integer") |
|
{ |
|
$class=substr($argument["type"],$colon); |
|
$type=substr($argument["type"],0,$colon); |
|
} |
|
else |
|
$class=""; |
if(!IsSet($argument["parameter"])) |
if(!IsSet($argument["parameter"])) |
$argument["parameter"]="in"; |
{ |
|
switch($type) |
|
{ |
|
case "ARRAY": |
|
case "HASH": |
|
case "OBJECT": |
|
$argument["parameter"]="inout"; |
|
break; |
|
default: |
|
$argument["parameter"]="in"; |
|
break; |
|
} |
|
} |
|
switch($argument["parameter"]) |
|
{ |
|
case "out": |
|
case "inout": |
|
switch($type) |
|
{ |
|
case "ARRAY": |
|
case "HASH": |
|
case "OBJECT": |
|
$buffer=""; |
|
break; |
|
default: |
|
$buffer="BUFFER"; |
|
} |
|
$argument["type"]=$type.$buffer.$class; |
|
break; |
|
default: |
|
switch($type) |
|
{ |
|
case "ARRAY": |
|
case "HASH": |
|
case "OBJECT": |
|
$compiler->SetElementError($attributes->file,$function_element_path,"arguments of type \"$type\" may only be \"out\" or \"inout\" parameters"); |
|
return(0); |
|
} |
|
break; |
|
} |
$function["Arguments"][$argument_name]=$argument; |
$function["Arguments"][$argument_name]=$argument; |
break; |
break; |
case "do": |
case "do": |
Line 662 class metal_class_class extends metal_ba
|
Line 708 class metal_class_class extends metal_ba
|
{ |
{ |
if(!IsSet($this->classes[$class]["functions"][$name]["do"]["code"])) |
if(!IsSet($this->classes[$class]["functions"][$name]["do"]["code"])) |
{ |
{ |
|
if(IsSet($this->generate_function[$class][$name])) |
|
{ |
|
$compiler->SetElementError($this->classes[$class]["functions"][$name]["do"]["file"],$this->classes[$class]["functions"][$name]["do"]["path"],"Generate function is being called recursively for class function \"$name\""); |
|
return(0); |
|
} |
|
$this->generate_function[$class][$name]=1; |
$this->classes[$class]["functions"][$name]["do"]["code"]=array(); |
$this->classes[$class]["functions"][$name]["do"]["code"]=array(); |
$function_name=$this->classes[$class]["function_name"]; |
$function_name=$this->classes[$class]["function_name"]; |
$return_type=$this->classes[$class]["return_type"]; |
$return_type=$this->classes[$class]["return_type"]; |
Line 682 class metal_class_class extends metal_ba
|
Line 734 class metal_class_class extends metal_ba
|
if(!$compiler->AddContextFunctions(&$action_context,$this->object_name,&$functions,&$level) |
if(!$compiler->AddContextFunctions(&$action_context,$this->object_name,&$functions,&$level) |
|| !$compiler->StartScope(&$action_context,&$scope,"method")) |
|| !$compiler->StartScope(&$action_context,&$scope,"method")) |
return(0); |
return(0); |
|
if(IsSet($this->classes[$class]["functions"][$name]["Arguments"])) |
|
{ |
|
$arguments=$this->classes[$class]["functions"][$name]["Arguments"]; |
|
for(Reset($arguments),$argument=0;$argument<count($arguments);Next($arguments),$argument++) |
|
{ |
|
$argument_name=Key($arguments); |
|
$variable=array( |
|
"Name"=>$argument_name, |
|
"Type"=>$arguments[$argument_name]["type"], |
|
"Argument"=>1 |
|
); |
|
if(!$compiler->DeclareVariable(&$action_context,&$variable)) |
|
return(0); |
|
} |
|
} |
$current_subclass=$this->current_subclass; |
$current_subclass=$this->current_subclass; |
$this->current_subclass=$class; |
$this->current_subclass=$class; |
if(!$compiler->GetOutputData($this->classes[$class]["functions"][$name]["do"]["file"],$this->classes[$class]["functions"][$name]["do"]["path"],&$this->classes[$class]["functions"][$name]["do"]["code"],"it were not defined valid class function do statements",1) |
if(!$compiler->GetOutputData($this->classes[$class]["functions"][$name]["do"]["file"],$this->classes[$class]["functions"][$name]["do"]["path"],&$this->classes[$class]["functions"][$name]["do"]["code"],"it were not defined valid class function do statements",1) |
|| !$compiler->GetScopeVariables(&$context,$scope,&$this->classes[$class]["functions"][$name]["variables"])) |
|| !$compiler->GetScopeVariables(&$context,$scope,&$this->classes[$class]["functions"][$name]["variables"]) |
|
|| !$compiler->GetScopeExceptions(&$context,$scope,&$this->classes[$class]["functions"][$name]["exceptions"])) |
return(0); |
return(0); |
$this->current_subclass=$current_subclass; |
$this->current_subclass=$current_subclass; |
$success=$compiler->EndScope(&$action_context,$scope); |
$success=$compiler->EndScope(&$action_context,$scope); |
Line 701 class metal_class_class extends metal_ba
|
Line 769 class metal_class_class extends metal_ba
|
$this->classes[$class]["function_name"]=$function_name; |
$this->classes[$class]["function_name"]=$function_name; |
$this->classes[$class]["return_type"]=$return_type; |
$this->classes[$class]["return_type"]=$return_type; |
$this->classes[$class]["return_value_set"]=$return_value_set; |
$this->classes[$class]["return_value_set"]=$return_value_set; |
|
Unset($this->generate_function[$class][$name]); |
} |
} |
return(1); |
return(1); |
} |
} |
Line 771 class metal_class_class extends metal_ba
|
Line 840 class metal_class_class extends metal_ba
|
$compiler->SetElementError($context->file,$element_path,"it was not defined the function to call before specifying the $function arguments"); |
$compiler->SetElementError($context->file,$element_path,"it was not defined the function to call before specifying the $function arguments"); |
return(0); |
return(0); |
} |
} |
|
$class=$subclass; |
|
if(!$this->InheritedFunctionClass(&$class,$call["function"])) |
|
{ |
|
$compiler->SetElementError($context->file,$element_path,"it was requested to $function a class function (\"".$call["function"]."\") that was not defined"); |
|
return(0); |
|
} |
if(!IsSet($this->classes[$class]["functions"][$call["function"]]["Arguments"])) |
if(!IsSet($this->classes[$class]["functions"][$call["function"]]["Arguments"])) |
{ |
{ |
$compiler->SetElementError($context->file,$element_path,"the specified function to $function does not take any arguments"); |
$compiler->SetElementError($context->file,$element_path,"the specified function to $function does not take any arguments"); |
Line 899 class metal_class_class extends metal_ba
|
Line 974 class metal_class_class extends metal_ba
|
|
|
Function IterateVariables(&$compiler,&$context,$class,&$variables,$protected,$public,$inherited) |
Function IterateVariables(&$compiler,&$context,$class,&$variables,$protected,$public,$inherited) |
{ |
{ |
|
if(IsSet($this->classes[$class]["parent"])) |
|
{ |
|
$parent=$this->classes[$class]["parent"]; |
|
switch($inherited) |
|
{ |
|
case "0": |
|
$inherit=0; |
|
$current=1; |
|
break; |
|
case "1": |
|
$inherit=1; |
|
$current=0; |
|
break; |
|
case "all": |
|
$inherit=1; |
|
$current=1; |
|
break; |
|
default: |
|
$compiler->SetElementError($context->file,$context->path,"$inherited is not a supported inherited variable type"); |
|
return(0); |
|
} |
|
} |
|
else |
|
{ |
|
$inherit=0; |
|
$current=1; |
|
} |
for($class_variable=0,Reset($this->classes[$class]["variables"]);$class_variable<count($this->classes[$class]["variables"]);Next($this->classes[$class]["variables"]),$class_variable++) |
for($class_variable=0,Reset($this->classes[$class]["variables"]);$class_variable<count($this->classes[$class]["variables"]);Next($this->classes[$class]["variables"]),$class_variable++) |
{ |
{ |
$this->current_class=$class; |
$this->current_class=$class; |
Line 909 class metal_class_class extends metal_ba
|
Line 1011 class metal_class_class extends metal_ba
|
|| ($protected |
|| ($protected |
&& IsSet($this->classes[$class]["variables"][$this->current_variable]["protected"])))) |
&& IsSet($this->classes[$class]["variables"][$this->current_variable]["protected"])))) |
{ |
{ |
if(!$compiler->GetOutputData($context->file,$context->path,&$context->result,"it was not defined valid action for the class variables",1)) |
if($current |
|
&& !$compiler->GetOutputData($context->file,$context->path,&$context->result,"it was not defined valid action for the class variables",1)) |
return(0); |
return(0); |
$variables[$this->current_variable]=$class; |
$variables[$this->current_variable]=$class; |
} |
} |
} |
} |
if($inherited |
if($inherit) |
&& IsSet($this->classes[$class]["parent"])) |
return($this->IterateVariables($compiler,$context,$parent,&$variables,$protected,$public,$inherited)); |
return($this->IterateVariables($compiler,$context,$this->classes[$class]["parent"],&$variables,$protected,$public,$inherited)); |
|
return(1); |
return(1); |
} |
} |
|
|
Function IterateFunctions(&$compiler,&$context,$class,&$functions,$protected,$public,$inherited) |
Function IterateFunctions(&$compiler,&$context,$class,&$functions,$protected,$public,$inherited) |
{ |
{ |
|
if(IsSet($this->classes[$class]["parent"])) |
|
{ |
|
$parent=$this->classes[$class]["parent"]; |
|
switch($inherited) |
|
{ |
|
case "0": |
|
$inherit=0; |
|
$current=1; |
|
break; |
|
case "1": |
|
$inherit=1; |
|
$current=0; |
|
break; |
|
case "all": |
|
$inherit=1; |
|
$current=1; |
|
break; |
|
default: |
|
$compiler->SetElementError($context->file,$context->path,"$inherited is not a supported inherited function type"); |
|
return(0); |
|
} |
|
if($inherit) |
|
return($this->IterateFunctions($compiler,$context,$parent,&$functions,$protected,$public,$inherited)); |
|
} |
|
else |
|
{ |
|
$inherit=0; |
|
$current=1; |
|
} |
for($class_function=0,Reset($this->classes[$class]["functions"]);$class_function<count($this->classes[$class]["functions"]);Next($this->classes[$class]["functions"]),$class_function++) |
for($class_function=0,Reset($this->classes[$class]["functions"]);$class_function<count($this->classes[$class]["functions"]);Next($this->classes[$class]["functions"]),$class_function++) |
{ |
{ |
$this->current_class=$class; |
$this->current_class=$class; |
Line 932 class metal_class_class extends metal_ba
|
Line 1063 class metal_class_class extends metal_ba
|
|| ($protected |
|| ($protected |
&& IsSet($this->classes[$class]["functions"][$this->current_function]["protected"])))) |
&& IsSet($this->classes[$class]["functions"][$this->current_function]["protected"])))) |
{ |
{ |
if(!$compiler->GetOutputData($context->file,$context->path,&$context->result,"it was not defined valid action for the class functions",1)) |
if($current |
|
&& !$compiler->GetOutputData($context->file,$context->path,&$context->result,"it was not defined valid action for the class functions",1)) |
return(0); |
return(0); |
$functions[$this->current_function]=$class; |
$functions[$this->current_function]=$class; |
} |
} |
} |
} |
if($inherited |
if($inherit) |
&& IsSet($this->classes[$class]["parent"])) |
return($this->IterateFunctions($compiler,$context,$parent,&$functions,$protected,$public,$inherited)); |
return($this->IterateFunctions($compiler,$context,$this->classes[$class]["parent"],&$functions,$protected,$public,$inherited)); |
|
return(1); |
return(1); |
} |
} |
|
|
Line 956 class metal_class_class extends metal_ba
|
Line 1087 class metal_class_class extends metal_ba
|
case "instancevariable": |
case "instancevariable": |
case "instancecall": |
case "instancecall": |
case "call": |
case "call": |
|
case "getproperty": |
|
case "definedproperty": |
|
case "getdocumentation": |
|
case "defineddocumentation": |
|
case "examplecode": |
|
case "new": |
|
case "objectvariable": |
|
case "forallvariables": |
|
case "forallfunctions": |
|
case "variablename": |
|
case "variabletype": |
|
case "variabletypename": |
|
case "definedvariabledefaultvalue": |
|
case "variabledefaultvalue": |
|
case "variableconvertedvalue": |
|
case "functionname": |
|
case "functiontype": |
|
case "functiontypename": |
|
case "functionistype": |
|
case "functionhasarguments": |
|
case "forallarguments": |
|
case "argumentname": |
|
case "argumenttype": |
|
case "argumenttypename": |
|
case "argumentparameter": |
|
case "inargument": |
|
case "outargument": |
|
case "inoutargument": |
|
case "lastargument": |
break; |
break; |
default: |
default: |
$compiler->SetElementError($context->file,$context->path,"$function function of the class class is not implemented for the language ".$compiler->language["name"]); |
$compiler->SetElementError($context->file,$context->path,"$function function of the class class is not implemented for the language ".$compiler->language["name"]); |
Line 1086 class metal_class_class extends metal_ba
|
Line 1246 class metal_class_class extends metal_ba
|
} |
} |
break; |
break; |
case "new": |
case "new": |
$new=array(); |
$message=array(); |
$elements=$arguments_code->structure[$arguments->path]["Elements"]; |
$elements=$arguments_code->structure[$arguments->path]["Elements"]; |
for($element=0;$element<$elements;$element++) |
for($element=0;$element<$elements;$element++) |
{ |
{ |
Line 1097 class metal_class_class extends metal_ba
|
Line 1257 class metal_class_class extends metal_ba
|
switch($data["Tag"]) |
switch($data["Tag"]) |
{ |
{ |
case "subclass": |
case "subclass": |
if(!$this->GetSubclassArgument(&$compiler,$arguments->file,$element_path,&$new)) |
if(!$this->GetSubclassArgument(&$compiler,$arguments->file,$element_path,&$message)) |
return(0); |
return(0); |
break; |
break; |
case "classpointer": |
case "classpointer": |
if(IsSet($new[$data["Tag"]])) |
if(IsSet($message[$data["Tag"]])) |
{ |
{ |
$compiler->SetElementError($arguments->file,$element_path,"it was specified the class new ".$data["Tag"]." argument more than once"); |
$compiler->SetElementError($arguments->file,$element_path,"it was specified the class new ".$data["Tag"]." argument more than once"); |
return(0); |
return(0); |
Line 1109 class metal_class_class extends metal_ba
|
Line 1269 class metal_class_class extends metal_ba
|
$evaluate_context=$arguments; |
$evaluate_context=$arguments; |
$evaluate_context->path=$element_path; |
$evaluate_context->path=$element_path; |
if(!$compiler->GetValidExpression(&$evaluate_context,"STRING","NOTLEFT","it was not specified a valid class new ".$data["Tag"]." argument",1) |
if(!$compiler->GetValidExpression(&$evaluate_context,"STRING","NOTLEFT","it was not specified a valid class new ".$data["Tag"]." argument",1) |
|| !$compiler->GetExpressionValue(&$context,&$evaluate_context->result,&$new[$data["Tag"]],&$expression_type)) |
|| !$compiler->GetExpressionValue(&$context,&$evaluate_context->result,&$message[$data["Tag"]],&$expression_type)) |
return(0); |
return(0); |
break; |
break; |
default: |
default: |
Line 1123 class metal_class_class extends metal_ba
|
Line 1283 class metal_class_class extends metal_ba
|
return(0); |
return(0); |
} |
} |
} |
} |
$subclass=(IsSet($new["subclass"]) ? $new["subclass"] : 0); |
if(!IsSet($message["subclass"])) |
|
$message["subclass"]=0; |
|
$subclass=$message["subclass"]; |
if(IsSet($this->classes[$subclass]["abstract"])) |
if(IsSet($this->classes[$subclass]["abstract"])) |
{ |
{ |
$compiler->SetElementError($context->file,$context->path,"an abstract class can not be instanciated"); |
$compiler->SetElementError($context->file,$context->path,"an abstract class can not be instanciated"); |
return(0); |
return(0); |
} |
} |
$context->result[]=array( |
if(!$this->language_bindings->Execute(&$compiler,&$context,&$this,$function,&$message)) |
"Data"=>array( |
return(0); |
"Object"=>$this->object_name, |
|
"Context"=>$this->classes[$subclass]["name"] |
|
), |
|
"Type"=>"INITIALIZATION" |
|
); |
|
if(IsSet($new["classpointer"])) |
|
$class_name=$new["classpointer"]; |
|
else |
|
{ |
|
$class_name=$this->classes[$subclass]["name"]; |
|
for($class=$subclass;;$class=$this->classes[$class]["parent"]) |
|
{ |
|
$this->classes[$class]["staticload"]=1; |
|
if(!$class) |
|
break; |
|
} |
|
} |
|
$context->result[]=array( |
|
"Data"=>array( |
|
"Value"=>"new $class_name", |
|
"Type"=>"OBJECT", |
|
"Class"=>$this->classes[$subclass]["name"], |
|
"Side"=>"RIGHT" |
|
), |
|
"Type"=>"EXPRESSION" |
|
); |
|
break; |
break; |
case "instancecall": |
case "instancecall": |
case "call": |
case "call": |
Line 1222 class metal_class_class extends metal_ba
|
Line 1358 class metal_class_class extends metal_ba
|
if($variable["Declared"]) |
if($variable["Declared"]) |
{ |
{ |
$variable["Type"]=$argument_context["type"]; |
$variable["Type"]=$argument_context["type"]; |
|
$variable["Initialized"]=0; |
if(!$compiler->DeclareVariable(&$context,&$variable)) |
if(!$compiler->DeclareVariable(&$context,&$variable)) |
return(0); |
return(0); |
if(!$compiler->GetValidExpression(&$evaluate_context,$argument_context["type"],$side,$error,0) |
if(!$compiler->GetValidExpression(&$evaluate_context,$argument_context["type"],$side,$error,0) |
Line 1294 class metal_class_class extends metal_ba
|
Line 1431 class metal_class_class extends metal_ba
|
return(0); |
return(0); |
break; |
break; |
case "objectvariable": |
case "objectvariable": |
$object_variable=array(); |
$message=array(); |
$elements=$arguments_code->structure[$arguments->path]["Elements"]; |
$elements=$arguments_code->structure[$arguments->path]["Elements"]; |
for($element=0;$element<$elements;$element++) |
for($element=0;$element<$elements;$element++) |
{ |
{ |
Line 1305 class metal_class_class extends metal_ba
|
Line 1442 class metal_class_class extends metal_ba
|
switch($data["Tag"]) |
switch($data["Tag"]) |
{ |
{ |
case "subclass": |
case "subclass": |
if(!$this->GetSubclassArgument(&$compiler,$arguments->file,$element_path,&$object_variable)) |
if(!$this->GetSubclassArgument(&$compiler,$arguments->file,$element_path,&$message)) |
return(0); |
return(0); |
break; |
break; |
case "object": |
case "object": |
if(IsSet($object_variable["object"])) |
if(IsSet($message["object"])) |
{ |
{ |
$compiler->SetElementError($arguments->file,$element_path,"it was specified the class object variable object argument more than once"); |
$compiler->SetElementError($arguments->file,$element_path,"it was specified the class object variable object argument more than once"); |
return(0); |
return(0); |
Line 1317 class metal_class_class extends metal_ba
|
Line 1454 class metal_class_class extends metal_ba
|
$evaluate_context=$arguments; |
$evaluate_context=$arguments; |
$evaluate_context->path=$element_path; |
$evaluate_context->path=$element_path; |
if(!$compiler->GetValidExpression(&$evaluate_context,"OBJECT","NOTLEFT","it was not specified a valid class object variable object expression",1) |
if(!$compiler->GetValidExpression(&$evaluate_context,"OBJECT","NOTLEFT","it was not specified a valid class object variable object expression",1) |
|| !$compiler->GetExpressionValue(&$context,&$evaluate_context->result,&$object_variable["object"],&$expression_type)) |
|| !$compiler->GetExpressionValue(&$context,&$evaluate_context->result,&$message["object"],&$expression_type)) |
return(0); |
return(0); |
break; |
break; |
default: |
default: |
Line 1331 class metal_class_class extends metal_ba
|
Line 1468 class metal_class_class extends metal_ba
|
return(0); |
return(0); |
} |
} |
} |
} |
if(!IsSet($object_variable["object"])) |
if(!IsSet($message["object"])) |
{ |
{ |
$compiler->SetElementError($arguments->file,$arguments->path,"it was not specified the class object variable object argument"); |
$compiler->SetElementError($arguments->file,$arguments->path,"it was not specified the class object variable object argument"); |
return(0); |
return(0); |
} |
} |
if(!$compiler->GetValidName($context->file,$context->path,&$name,"it was not specified a valid class variable name")) |
if(!$compiler->GetValidName($context->file,$context->path,&$name,"it was not specified a valid class variable name")) |
return(0); |
return(0); |
$subclass=(IsSet($object_variable["subclass"]) ? $object_variable["subclass"] : 0); |
if(!IsSet($message["subclass"])) |
|
$message["subclass"]=0; |
|
$subclass=$message["subclass"]; |
if(IsSet($this->classes[$subclass]["abstract"])) |
if(IsSet($this->classes[$subclass]["abstract"])) |
{ |
{ |
$compiler->SetElementError($context->file,$context->path,"abstract class variables can not be accessed"); |
$compiler->SetElementError($context->file,$context->path,"abstract class variables can not be accessed"); |
Line 1354 class metal_class_class extends metal_ba
|
Line 1493 class metal_class_class extends metal_ba
|
$compiler->SetElementError($context->file,$context->path,"it was attempted to access an object protected variable (\"$name\") from outside the class scope"); |
$compiler->SetElementError($context->file,$context->path,"it was attempted to access an object protected variable (\"$name\") from outside the class scope"); |
return(0); |
return(0); |
} |
} |
$context->result[]=array( |
$message["subclass"]=$subclass; |
"Data"=>array( |
$message["name"]=$name; |
"Value"=>$object_variable["object"]."->$name", |
if(!$this->language_bindings->Execute(&$compiler,&$context,&$this,$function,&$message)) |
"Type"=>$this->classes[$subclass]["variables"][$name]["type"], |
return(0); |
"Side"=>"BOTH" |
|
), |
|
"Type"=>"EXPRESSION" |
|
); |
|
break; |
break; |
case "functionargument": |
case "functionargument": |
$message=array(); |
$message=array(); |
Line 1482 class metal_class_class extends metal_ba
|
Line 1617 class metal_class_class extends metal_ba
|
return(0); |
return(0); |
} |
} |
break; |
break; |
case "definetypes": |
|
if(!$this->GetClassScope(&$compiler,&$arguments_code,&$arguments,&$class,0,$tags)) |
|
return(0); |
|
$elements=$code->structure[$context->path]["Elements"]; |
|
for($element=0;$element<$elements;$element++) |
|
{ |
|
$element_path=$context->path.",$element"; |
|
$data=$code->structure[$element_path]; |
|
if(GetType($data)=="array") |
|
{ |
|
switch($data["Tag"]) |
|
{ |
|
case "VOID": |
|
case "STRING": |
|
case "INTEGER": |
|
case "FLOAT": |
|
case "BOOLEAN": |
|
case "OBJECT": |
|
case "ARRAY": |
|
case "HASH": |
|
if(IsSet($this->classes[$class]["types"][$data["Tag"]])) |
|
{ |
|
$compiler->SetElementError($context->file,$element_path,"it was defined the class data type \"".$data["Tag"]."\" more than once"); |
|
return(0); |
|
} |
|
if(!$compiler->GetValidData($context->file,$element_path,&$type,"it was not specified a valid class data type option")) |
|
return(0); |
|
$type_name=$data["Tag"]; |
|
$this->classes[$class]["types"][$type_name]=$type; |
|
$parent=$class; |
|
while(IsSet($this->classes[$parent]["parent"])) |
|
{ |
|
$parent=$this->classes[$parent]["parent"]; |
|
$this->classes[$parent]["types"][$type_name]=$type; |
|
} |
|
break; |
|
default: |
|
$compiler->SetElementError($context->file,$element_path,"it was not defined a valid class data type"); |
|
return(0); |
|
} |
|
} |
|
else |
|
{ |
|
if(!$compiler->CheckWhiteSpace($context->file,$data,$element_path)) |
|
return(0); |
|
} |
|
} |
|
break; |
|
case "forallfunctions": |
case "forallfunctions": |
if(!$this->GetClassScope(&$compiler,&$arguments_code,&$arguments,&$class,1,$tags)) |
if(!$this->GetClassScope(&$compiler,&$arguments_code,&$arguments,&$class,1,$tags)) |
return(0); |
return(0); |
Line 1582 class metal_class_class extends metal_ba
|
Line 1669 class metal_class_class extends metal_ba
|
{ |
{ |
case "1": |
case "1": |
case "": |
case "": |
$inherited=1; |
$inherited="1"; |
break; |
break; |
case "0": |
case "0": |
$inherited=0; |
$inherited="0"; |
|
break; |
|
case "all": |
|
$inherited="all"; |
break; |
break; |
default: |
default: |
$compiler->SetElementError($tags["inherited"]->file,$tags["inherited"]->path,"it was not specified a valid class function inherited value"); |
$compiler->SetElementError($tags["inherited"]->file,$tags["inherited"]->path,"it was not specified a valid class function inherited value"); |
Line 1608 class metal_class_class extends metal_ba
|
Line 1698 class metal_class_class extends metal_ba
|
$success=$this->IterateFunctions($compiler,$context,$class,$functions,$protected,$public,$inherited); |
$success=$this->IterateFunctions($compiler,$context,$class,$functions,$protected,$public,$inherited); |
$this->current_class=$current_class; |
$this->current_class=$current_class; |
$this->current_function=$current_function; |
$this->current_function=$current_function; |
if(!$compiler->RemoveContextFunctions(&$context,$this->object_name,$level) |
if(!$success |
|| !$success) |
|| !$compiler->RemoveContextFunctions(&$context,$this->object_name,$level)) |
return(0); |
return(0); |
break; |
break; |
case "forallvariables": |
case "forallvariables": |
Line 1664 class metal_class_class extends metal_ba
|
Line 1754 class metal_class_class extends metal_ba
|
{ |
{ |
case "1": |
case "1": |
case "": |
case "": |
$inherited=1; |
$inherited="1"; |
break; |
break; |
case "0": |
case "0": |
$inherited=0; |
$inherited="0"; |
|
break; |
|
case "all": |
|
$inherited="all"; |
break; |
break; |
default: |
default: |
$compiler->SetElementError($tags["inherited"]->file,$tags["inherited"]->path,"it was not specified a valid class variable inherited value"); |
$compiler->SetElementError($tags["inherited"]->file,$tags["inherited"]->path,"it was not specified a valid class variable inherited value"); |
Line 1690 class metal_class_class extends metal_ba
|
Line 1783 class metal_class_class extends metal_ba
|
$success=$this->IterateVariables($compiler,$context,$class,$variables,$protected,$public,$inherited); |
$success=$this->IterateVariables($compiler,$context,$class,$variables,$protected,$public,$inherited); |
$this->current_class=$current_class; |
$this->current_class=$current_class; |
$this->current_variable=$current_variable; |
$this->current_variable=$current_variable; |
if(!$compiler->RemoveContextFunctions(&$context,$this->object_name,$level) |
if(!$success |
|| !$success) |
|| !$compiler->RemoveContextFunctions(&$context,$this->object_name,$level)) |
return(0); |
return(0); |
break; |
break; |
case "forallarguments": |
case "forallarguments": |
Line 1713 class metal_class_class extends metal_ba
|
Line 1806 class metal_class_class extends metal_ba
|
"argumenttype", |
"argumenttype", |
"argumenttypename", |
"argumenttypename", |
"argumentparameter", |
"argumentparameter", |
|
"inargument", |
|
"outargument", |
|
"inoutargument", |
"lastargument" |
"lastargument" |
); |
); |
if(!$compiler->AddContextFunctions(&$context,$this->object_name,&$functions,&$level)) |
if(!$compiler->AddContextFunctions(&$context,$this->object_name,&$functions,&$level)) |
Line 1755 class metal_class_class extends metal_ba
|
Line 1851 class metal_class_class extends metal_ba
|
break; |
break; |
} |
} |
$this->current_class=$current_class; |
$this->current_class=$current_class; |
if(!$compiler->RemoveContextFunctions(&$context,$this->object_name,$level) |
if(!$success |
|| !$success) |
|| !$compiler->RemoveContextFunctions(&$context,$this->object_name,$level)) |
return(0); |
return(0); |
break; |
break; |
case "getdocumentation": |
case "getdocumentation": |
Line 1915 class metal_class_class extends metal_ba
|
Line 2011 class metal_class_class extends metal_ba
|
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["type"]; |
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["type"]; |
break; |
break; |
case "functiontypename": |
case "functiontypename": |
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["type"]; |
$message=array("type"=>$this->classes[$this->current_class]["functions"][$this->current_function]["type"]); |
if(IsSet($this->classes[$this->current_class]["types"][$value])) |
if(!$this->language_bindings->Execute(&$compiler,&$context,&$this,"typename",&$message)) |
$value=$this->classes[$this->current_class]["types"][$value]; |
return(0); |
|
$value=$message["name"]; |
break; |
break; |
case "functionistype": |
case "functionistype": |
if(!$compiler->GetValidData($context->file,$context->path,&$type,"it was not specified a valid class function return type")) |
if(!$compiler->GetValidData($context->file,$context->path,&$type,"it was not specified a valid class function return type")) |
Line 1952 class metal_class_class extends metal_ba
|
Line 2049 class metal_class_class extends metal_ba
|
case "argumenttype": |
case "argumenttype": |
case "argumenttypename": |
case "argumenttypename": |
case "argumentparameter": |
case "argumentparameter": |
|
case "inargument": |
|
case "outargument": |
|
case "inoutargument": |
case "lastargument": |
case "lastargument": |
if(!strcmp($this->current_argument,"")) |
if(!strcmp($this->current_argument,"")) |
{ |
{ |
Line 1967 class metal_class_class extends metal_ba
|
Line 2067 class metal_class_class extends metal_ba
|
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["type"]; |
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["type"]; |
break; |
break; |
case "argumenttypename": |
case "argumenttypename": |
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["type"]; |
$message=array("type"=>$this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["type"]); |
if(IsSet($this->classes[$this->current_class]["types"][$value])) |
if(!$this->language_bindings->Execute(&$compiler,&$context,&$this,"typename",&$message)) |
$value=$this->classes[$this->current_class]["types"][$value]; |
return(0); |
|
$value=$message["name"]; |
break; |
break; |
case "argumentparameter": |
case "argumentparameter": |
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["parameter"]; |
$value=$this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["parameter"]; |
break; |
break; |
|
case "inargument": |
|
$value=($this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["parameter"]=="in" ? "1" : "0"); |
|
break; |
|
case "outargument": |
|
$value=($this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["parameter"]=="out" ? "1" : "0"); |
|
break; |
|
case "inoutargument": |
|
$value=($this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"][$this->current_argument]["parameter"]=="inout" ? "1" : "0"); |
|
break; |
case "lastargument": |
case "lastargument": |
$value=($this->current_argument_number+1==count($this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"]) ? "1" : "0"); |
$value=($this->current_argument_number+1==count($this->classes[$this->current_class]["functions"][$this->current_function]["Arguments"]) ? "1" : "0"); |
break; |
break; |
Line 2003 class metal_class_class extends metal_ba
|
Line 2113 class metal_class_class extends metal_ba
|
$value=$this->classes[$this->current_class]["variables"][$this->current_variable]["type"]; |
$value=$this->classes[$this->current_class]["variables"][$this->current_variable]["type"]; |
break; |
break; |
case "variabletypename": |
case "variabletypename": |
$value=$this->classes[$this->current_class]["variables"][$this->current_variable]["type"]; |
$message=array("type"=>$this->classes[$this->current_class]["variables"][$this->current_variable]["type"]); |
if(IsSet($this->classes[$this->current_class]["types"][$value])) |
if(!$this->language_bindings->Execute(&$compiler,&$context,&$this,"typename",&$message)) |
$value=$this->classes[$this->current_class]["types"][$value]; |
return(0); |
|
$value=$message["name"]; |
break; |
break; |
case "definedvariabledefaultvalue": |
case "definedvariabledefaultvalue": |
$value=(IsSet($this->classes[$this->current_class]["variables"][$this->current_variable]["value"]) ? "1" : "0"); |
$value=(IsSet($this->classes[$this->current_class]["variables"][$this->current_variable]["value"]) ? "1" : "0"); |
Line 2033 class metal_class_class extends metal_ba
|
Line 2144 class metal_class_class extends metal_ba
|
); |
); |
break; |
break; |
case "examplecode": |
case "examplecode": |
|
$message=array(); |
if(!$this->GetClassScope(&$compiler,&$arguments_code,&$arguments,&$class,1,$tags)) |
if(!$this->GetClassScope(&$compiler,&$arguments_code,&$arguments,&$class,1,$tags)) |
return(0); |
return(0); |
$result=array(); |
$result=array(); |
if(!$compiler->GetOutputData($context->file,$context->path,&$result,"invalid example code",1)) |
if(!$compiler->StartScope(&$context,&$scope,"global") |
|
|| !$compiler->GetOutputData($context->file,$context->path,&$message["result"],"invalid example code",1) |
|
|| !$compiler->GetScopeVariables(&$context,$scope,&$message["variables"]) |
|
|| !$compiler->GetScopeExceptions(&$context,$scope,&$message["exceptions"]) |
|
|| !$compiler->EndScope(&$context,$scope)) |
return(0); |
return(0); |
$initialization=1; |
$initialization=1; |
if(IsSet($tags["initialization"])) |
if(IsSet($tags["initialization"])) |
Line 2047 class metal_class_class extends metal_ba
|
Line 2163 class metal_class_class extends metal_ba
|
{ |
{ |
case "1": |
case "1": |
case "": |
case "": |
$initialization=1; |
$message["initialization"]=1; |
break; |
break; |
case "0": |
case "0": |
$initialization=0; |
$message["initialization"]=0; |
break; |
break; |
default: |
default: |
$compiler->SetElementError($tags["initialization"]->file,$tags["initialization"]->path,"it was not specified a valid class example code initialization value"); |
$compiler->SetElementError($tags["initialization"]->file,$tags["initialization"]->path,"it was not specified a valid class example code initialization value"); |
return(0); |
return(0); |
} |
} |
} |
} |
if($initialization) |
if(!$this->language_bindings->Execute(&$compiler,&$context,&$this,$function,&$message)) |
{ |
return(0); |
if(!$compiler->GenerateOutput(&$context,&$result,&$output,"",0)) |
|
return(0); |
|
} |
|
else |
|
{ |
|
for($stripped=array(),$part=0;$part<count($result);$part++) |
|
{ |
|
switch($result[$part]["Type"]) |
|
{ |
|
case "INITIALIZATION": |
|
break; |
|
default: |
|
$stripped[]=$result[$part]; |
|
break; |
|
} |
|
} |
|
if(!$compiler->GenerateOutput(&$context,&$stripped,&$output,"",0)) |
|
return(0); |
|
} |
|
$context->result[]=array( |
|
"Data"=>$output, |
|
"Type"=>"DATA" |
|
); |
|
break; |
break; |
default: |
default: |
$compiler->SetElementError($context->file,$context->path,$function." is not a supported class object function"); |
$compiler->SetElementError($context->file,$context->path,$function." is not a supported class object function"); |