Under Review
over 1 year ago

COMPILER BUG: cannot compile classes with static functions

There are several issues with the available compilers (SDK 4.1.7 and SDK 4.2.0 Beta 1) if a class contains a static function and the parameters of the function are Monkey Typed with the compiler set to "Gradual" or higher.

  1. Cannot find symbol errors for functions on core classes (eg. Position.Location); and
  2. Error parsing the global namespace ($.) when specifying the Monkey Type for a function parameter.

I tried the broken, replicateable code on SDK 4.1.5, SDK 4.1.6, SDK 4.1.7 and SDK 4.2.0 Beta 1.

Error #1 occurs only on SDK 4.1.7 (ie. it works fine on SDK 4.1.5, SDK 4.1.6, SDK 4.2.0 Beta 1).

Error #2 occurs on all the SDKs listed above -- SDK 4.1.5, SDK 4.1.6, SDK 4.1.7 and SDK 4.2.0 Beta 1.

These errors may or may not be related to this issue: https://forums.garmin.com/developer/connect-iq/i/bug-reports/bug-report-static-lang-dictionary-class-variable-broken-in-sdk-4-1-6

I am not able to attach my test project that will easily replicate both issues/bugs but I have emailed the ZIP to the Connect IQ team. If anyone would like the project file to validate the issue or use it as the basis for a similar sounding bug or just out of curiosity, then DM me. For reference, the function within the class looks like this:

    static function compilerErrorOne(location as Position.Location, waypoint) as BrokenClass {
        var decimalDeg = location.toDegrees();
        var wpDecDeg = waypoint.getLocation().toDegrees();
        var brokenClass = new BrokenClass(null);
        return (brokenClass);
    }
    
    static function compilerErrorTwo(location, waypoint as $.Waypoint) as BrokenClass {
        var decimalDeg = location.toDegrees();
        var wpDecDeg = waypoint.getLocation().toDegrees();
        var brokenClass = new BrokenClass(null);
        return (brokenClass);
    }

Parents
  • Really ? I still have an issue:

    module test {
        class Test {
        private var _a as Number;
        
        public function initialize(a as Number) {
        _a = a;
        }
        
        public function a() as Number { return _a; }
        
        public static function dummy(first as Test, second as Test) as Test {
        var temp = new Test(first.a() * second.a();
        return temp;
        }
        }
        }

    This does not compile because the compiler does not find the symbol ":a" on txpe $.test.Test

    Do you have any idea ?

Comment
  • Really ? I still have an issue:

    module test {
        class Test {
        private var _a as Number;
        
        public function initialize(a as Number) {
        _a = a;
        }
        
        public function a() as Number { return _a; }
        
        public static function dummy(first as Test, second as Test) as Test {
        var temp = new Test(first.a() * second.a();
        return temp;
        }
        }
        }

    This does not compile because the compiler does not find the symbol ":a" on txpe $.test.Test

    Do you have any idea ?

Children