Jump to content
  • Advertisement

agentprog

Member
  • Content Count

    9
  • Joined

  • Last visited

Community Reputation

119 Neutral

About agentprog

  • Rank
    Newbie
  1. Hello.   I have the following property: SceneObject @object { get { return object_; } } When I do a check like this: if (@object != null) {} it issues a warning: "The operand is implicitly converted to handle in order to compare them" like if I didn't put @ before the property. If i use a temporary variable, no warning is shown. If I use get_object() explicitly, no warning is shown too. Using "!is" is fine, but I'm curious about this construct. Am I missing something?   I am using Angelscript 2.29.2
  2. agentprog

    Can't load bytecode with string literals

    Thank you very much for resolving this problem. Though compiling with gcc you should also add additional #include <stdlib.h> in scripthelper.cpp to compile it :)
  3. agentprog

    Inter-module class access

    There is a class in AngelScript addons, called CScriptBuilder. It allows you to create modules from several files (or memory). Besides that, it allows you to use C-style includes in your scripts.
  4. agentprog

    Can't load bytecode with string literals

    After some experiments, I've found out, that without using string pool everything works fine. When using string pool, for some reason it outputs non-pool version of string factory to configuration. So compiler supposes that string factory returns string and runner expects from it to return const string &.
  5. agentprog

    Can't load bytecode with string literals

    From what I see in writing/reading configuration file, engine properties and string factory are dumped and restored correctly and I don't see anything, that can affect bytecode generation. Both asbuild and asrun are linked against the same AngelScript library, so there should be no problem with version incompatibility.
  6. agentprog

    Can't load bytecode with string literals

    This file was generated with my version of asrun. Compilation was done fine, so i didn't think the problem could be in it.   Config parsing in asbuild is the same as in original asbuild sample, just with some workaround for template callbacks.
  7. agentprog

    Can't load bytecode with string literals

    A typical workflow I use to reproduce this behaviour: Dump configuration with modifier asrun program. Compile sample code with this configuration into bytecode with separate compiler (modified asbuild), then try to run the compiled bytecode with asrun, which generated the configuration. Anything, containing string literals makes it fail to load the bytecode:   [source] string s1 = "123"; string s2("abc"); s1 = "qwe"; writeln("Hello"); dictionary dict = {{"test", 42}}; [/source]   Modifications of asbuild are not very significant (hardcode array's template callback to allow its registration). In asrun i've removed building module from source with CScriptBuilder and added loading from bytecode like this: [source] BytecodeStream stream; // file stream with implemented Read() r = stream.Open(options_.bytecodeFile().c_str());   asIScriptModule *mod = engine_->GetModule("Run", asGM_ALWAYS_CREATE);   r = mod->LoadByteCode(&stream);  // <- here it fails   asIScriptFunction *func = mod->GetFunctionByDecl("int main()"); if (!func) {   func = mod->GetFunctionByDecl("void main()"); }   asIScriptContext *ctx = engine_->CreateContext();   r = mod->ResetGlobalVars(ctx);   ctx->Prepare(func); r = ctx->Execute(); ctx->Release(); [/source]   Error checks are removed for brevity. Maybe I'm doing something wrong or forgot something?
  8. Hello!   If I compile a script containing string literal to bytecode, it compiles successfully. But when I try to load this bytecode in the application, it says for instance: "LoadByteCode failed. The bytecode is invalid. Number of bytes read from stream: 110". I'm using ScriptStdString implementation and the problem persists both in 2.28.2 and trunk (rev. 1933). Using string class itself and other add-on classes seems fine.   Test code (compiles and loads): [source]int main() {   return 0; }[/source]   Test code (compiles, but doesn't load): [source]int main() {   "abc";   return 0; }[/source]   UPD: if it matters, my system is x86 Linux, compiler: gcc (GCC) 4.9.0 20140507 (prerelease).   UPD2: windows 8 x64 with VS2013 shows the very same results.
  9. Hello!   I've noticed, that when using WriteConfigToFile() function with objects having asBEHAVE_LIST_CONSTRUCT or asBEHAVE_LIST_FACTORY behaviors, it writes the declaration without commas in the list declaration. For example, dictionary from add-ons registers it with "dictionary @f(int &in) {repeat {string, ?}}", but after WriteConfigToFile() it looks like "dictionary@ _beh_4_(int&in) { repeat { string ? } }" without comma between "string" and "?". It prevents asbuild from registering such behaviors.   After some digging into WriteConfigToFile(), I've found out, that it just uses the return value of asIScriptFunction::GetDeclaration(), with just escaping the quotes. So commas are removed somewhere inside the engine. It's not a problem to put commas manually in the saved configuration file, but if updating it frequently, it becomes irritating.   After some more digging into engine itself, I think, I've found the problem in as_scriptfunction.cpp in asCScriptFunction::GetDeclarationStr(). Patch is in attachment. It works for me, but I'm not sure if it doesn't break anything else.   I'm using AngelScript library version 2.28.2, so as far as I can see, this is the latest version.
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!