• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. SKILL++ private functions

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 144
  • Views 13637
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SKILL++ private functions

acook
acook over 11 years ago

I've read the Skill manual as well as done some poking about but I still am somewhat unclear on how to delare a private function for a class method.

 For instance, I have a class "Example"

 defclass( Example () () )

 Now I give it a method

defmethod( Fun (( obj Example))    .... )

 

How can I define a procedure that only "Fun" can access.

Secondly, how do I define procedures that only methods of "Example" can access?

  • Cancel
  • acook
    acook over 11 years ago

    In addition is it possible to give a set of procedures their own private procedure

     procedure( fun1() private1() )

      procedure( fun2() private1() )

    procedure( private1() println("HI") )
     
    Where private1 is only visible to fun1 and fun2 
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 11 years ago

    For the second post, you can do this:

    let(()
      procedure(private1()
        println("This is private")
      )
      globalProc(fun1() private1())
      globalProc(fun2() private1())
    )


    Put this in a file called "mycode.ils" (the .ils suffix is important). This will then use lexical scoping. The globalProc tells SKILL that the function should be visible in the global scope, rather than only in the lexical scope. globalProc is available from IC615 onwards. If using IC614 or before (or IC5141 or before), you can achieve the same end by doing:

    let(()
      procedure(private1()
        println("This is private")
      )
      procedure(localfun1() private1())
      procedure(localfun2() private1())
      ; functions can be retrieve as variables in SKILL++, so assign
      ; to non-local variable names to make the functions available
      ; in the global scope
      fun1=localfun1
      fun2=localfun2
    ) 

    As for your first post, I'm not entirely sure what you mean. But it's probably this:

    defclass( Example () () )

    let(()
      procedure(private1()
        println("This is private")
      )
      defmethod(Fun ((obj Example))
        private1()
      )
    )

    defmethod inside a let does not make it local - that's because the generic function is global, essentially. But it will honour the lexical scoping - so you can call a function in the same lexical scope.

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information