Closed endel closed 9 years ago
Hi @jakubmisek,
I'm trying to compile hook with Phalanger, but the following line of code is causing "method or operation is not implemented:": https://github.com/doubleleft/hook/blob/bde2b2e705a5f1d6323b6c7684be19e17afbae96/src/Database/Schema/Builder.php#L84
return static::migrate($model, $config);
After changing from static::migrate to self::migrate it compiles. It's strange because there is other static:: call in the same file here.
static::migrate
self::migrate
static::
Do you have any hint?
Compilation error:
Error 70 Internal error! Please, report this bug via http://phalanger.codeplex.com/workitem/list/basic. Additional information: The method or operation is not implemented. at PHP.Core.CodeGenerator.EmitLoadStaticTypeDesc(ResolveTypeFlags flags) at PHP.Core.Reflection.StaticType.EmitLoadTypeDesc(CodeGenerator codeGenerator, ResolveTypeFlags flags) at PHP.Core.CodeGenerator.EmitRoutineOperatorCall(DType type, Expression targetExpr, String routineFullName, String fallbackRoutineFullname, Expression routineNameExpr, CallSignature callSignature, AccessType access) at PHP.Core.Reflection.UnknownMethod.EmitCall(CodeGenerator codeGenerator, String fallbackQualifiedName, CallSignature callSignature, IPlace instance, Boolean runtimeVisibilityCheck, Int32 overloadIndex, DType type, Span position, AccessType access, Boolean callVirt) at PHP.Core.Compiler.AST.NodeCompilers.DirectStMtdCallCompiler.Emit(DirectStMtdCall node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.ExpressionCompiler`1.PHP.Core.Compiler.AST.IExpressionCompiler.Emit(Expression node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.AstNodeExtension.Emit(Expression node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.JumpStmtCompiler.EmitReturnObject(Expression expr, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.JumpStmtCompiler.Emit(JumpStmt node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.StatementCompiler`1.PHP.Core.Compiler.AST.IStatementCompiler.Emit(Statement node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(Statement statement, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(IEnumerable`1 statements, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.BlockStmtCompiler.Emit(BlockStmt node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.StatementCompiler`1.PHP.Core.Compiler.AST.IStatementCompiler.Emit(Statement node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(Statement statement, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.IfStmtCompiler.Emit(IfStmt node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.StatementCompiler`1.PHP.Core.Compiler.AST.IStatementCompiler.Emit(Statement node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(Statement statement, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(IEnumerable`1 statements, CodeGenerator codeGenerator) at PHP.Core.CodeGenerator.EmitArgfullOverloadBody(PhpRoutine routine, IEnumerable`1 body, Span entirePosition, Int32 declarationBodyPosition) at PHP.Core.Compiler.AST.NodeCompilers.MethodDeclCompiler.Emit(MethodDecl node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.TypeMemberDeclCompiler`1.PHP.Core.Compiler.AST.ITypeMemberDeclCompiler.Emit(TypeMemberDecl node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.TypeDeclCompiler.EmitDefinition(CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.TypeDeclCompiler.Emit(TypeDecl node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.StatementCompiler`1.PHP.Core.Compiler.AST.IStatementCompiler.Emit(Statement node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(Statement statement, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.NamespaceDeclCompiler.Emit(NamespaceDecl node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.StatementCompiler`1.PHP.Core.Compiler.AST.IStatementCompiler.Emit(Statement node, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.StatementUtils.Emit(Statement statement, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.NodeCompilers.GlobalCodeCompiler.Emit(GlobalCode ast, CodeGenerator codeGenerator) at PHP.Core.Compiler.AST.GlobalCodeCompilerHelper.Emit(GlobalCode ast, CodeGenerator codeGenerator) at PHP.Core.Reflection.CompilationSourceUnit.Emit(CodeGenerator codeGenerator) at PHP.Core.Reflection.ScriptCompilationUnit.Emit(CodeGenerator codeGenerator) at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator) at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, CompilationContext context) at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context) at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps) -1 0 HookDotNet
Another thing to note is that static and self are different according to class inheritance in PHP.
static
self
Hi,
It seams lambda confuses compiler and it won't handle static then. I'll try to fix this one.
Fixed in 84ca0d9c7f7e742215d924361e911d07ea92640c
Wow, you're fast. I'll try to compile now!
Hi @jakubmisek,
I'm trying to compile hook with Phalanger, but the following line of code is causing "method or operation is not implemented:": https://github.com/doubleleft/hook/blob/bde2b2e705a5f1d6323b6c7684be19e17afbae96/src/Database/Schema/Builder.php#L84
After changing from
static::migrate
toself::migrate
it compiles. It's strange because there is otherstatic::
call in the same file here.Do you have any hint?
Compilation error:
Another thing to note is that
static
andself
are different according to class inheritance in PHP.