corenova / yang-js

YANG parser and composer
Apache License 2.0
56 stars 18 forks source link

Using extensions in augmented list or containers results in parsing error #94

Closed majakizic closed 5 years ago

majakizic commented 5 years ago

Hi I am getting an error when using an extension within augmented list:

  augment "/foo:c1/foo:c2" {
  list l{
      foo:c-define "MY_INTERFACES";
                ...

Full stack trace:

\yang-js\lib\element.js:128 if ((this.tag != null) && ((ref = this.source.argument) !== 'value' && r ef !== 'text')) { ^

TypeError: Cannot read property 'argument' of undefined at Extension.get (C:\Users\m00332040\tmp\node_modules\yang-js\lib\element.js :128:55) at Extension.Element.error (C:\Users\m00332040\tmp\node_modules\yang-js\lib\ element.js:62:22) at Extension.Expression.error (C:\Users\m00332040\tmp\node_modules\yang-js\l ib\expression.js:191:40) at Extension.Element (C:\Users\m00332040\tmp\node_modules\yang-js\lib\elemen t.js:78:20) at Extension.Expression [as constructor] (C:\Users\m00332040\tmp\node_module s\yang-js\lib\expression.js:37:40) at new Extension (C:\Users\m00332040\tmp\node_modules\yang-js\lib\extension. js:26:39) at Extension.Element.clone (C:\Users\m00332040\tmp\node_modules\yang-js\lib\ element.js:220:15) at Extension.Expression.clone (C:\Users\m00332040\tmp\node_modules\yang-js\l ib\expression.js:58:41)

Steps to reproduce:

        Yang = require('yang-js');

        Yang.clear()

        schema1 = """
          module foo2 {
            namespace "http://foo2.com/foo2";
            prefix foo2;
            extension c-define {
              argument "name";
            }   
            container c1 {
                container c2 {
                  leaf a1 {
                    type string;
                  }
                }
              }
          }
            """
        schema2 = """
          module bar {
            namespace "http://bar.com/bar";
              prefix bar;
            import foo2 {
              prefix foo;
            }
            augment "/foo:c1/foo:c2" {
                list l{
                    foo:c-define "MY_INTERFACES";
                    key "a";
                    leaf a {
                        type string;
                    }
                }
            }
          }
            """
        y1 = Yang.use (Yang.parse schema1)
        y2 = Yang.parse schema2

Best regards Maja

sekur commented 5 years ago

@majakizic - thanks for reporting this issue. I've fixed in master repo. will include the fix in upcoming release.

majakizic commented 5 years ago

Great. Thank you for your quick response.